<?php
/*
###########################################################################
#                                  KALMAR                                 #
#                      http://akkar.sourceforge.net/                      #
#                                                                         #
#                            -------------------                          #
#                            mysql_functions.php                          #
#                            -------------------                          #
#                                                                         #
#   copyright (C) 2004 Roy W. Andersen                                    #
#   email: ensnared@gmail.com                                             #
#                                                                         #
###########################################################################

###########################################################################
#                                                                         #
#  This program is free software; you can redistribute it and/or modify   #
#  it under the terms of the GNU General Public License as published by   #
#  the Free Software Foundation; either version 2 of the License, or      #
#  (at your option) any later version.                                    #
#                                                                         #
###########################################################################
*/
if (!defined('IN_KALMAR')) {
	exit('Access violation.');
}
echo 'included mysql_functions';

# Establish the MySQL connection and select our database
$connection = mysql_pconnect($sqlserver, $sqluser, $sqlpasswd) or exit(mysql_error());
mysql_select_db($sqlbase);

##################################
# Funksjoner for rollebehandling #
##################################

function get_rolle($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$spillinfo = get_spillinfo($spill_id);
	$mal_id = $spillinfo['rollemal'];
	$pubfields = array(
		'rolle_id'=>1,
		'arrangor_id'=>1,
		'spill_id'=>1,
		'spiller_id'=>1,
		'navn'=>1,
		'oppdatert'=>1,
		'status'=>1,
		'locked'=>1
	);
	if ($maldata = get_maldata($mal_id)) {
		foreach ($maldata as $value) {
			if ($value['intern'] != 1) {
				$malfields .= $value['fieldname'].",";
			}
			if ($value['public'] == 1) {
				$pubfields[$value['fieldname']] = 1;
			}
		}
	}
	$fields = "rolle_id,arrangor_id,spill_id,spiller_id,navn,".$malfields."beskrivelse1,beskrivelse2,beskrivelse3,beskrivelse_gruppe,bilde,oppdatert,status,status_id,status_tekst,locked";
	$rolle = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `".$table_prefix."roller` WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id), $connection));
	if ($rolle) {
		if (($config['kalmar_paranoid'] == 1 && is_related($rolle['rolle_id'], $rolle['spill_id'])) || ($config['kalmar_paranoid'] != 1)) {
			if ($rolle['spiller_id'] == $_SESSION['person_id']) {
				return $rolle;
			} else {
				foreach ($rolle as $key=>$value) {
					if ($pubfields[$key]) {
						$pubrolle[$key] = $value;
					}
				}
				return $pubrolle;
			}
		}
	}
	return false;
}

// Checks if a character is related to another, either through common group memberships, or through acquaintances
function is_related($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	
	// Get all characters belonging to the player for the game
	if ($mineroller = get_mine_roller($spill_id)) {
		foreach ($mineroller[$spill_id] as $minrolle) {
			// Check each character against the provided character ID
			if ($rolle_id == $minrolle['rolle_id']) {
				// One and the same - yes, they're related ;)
				return true;
			}
			if (mysql_num_rows(mysql_query('SELECT * FROM  `'.$table_prefix.'kjentfolk` WHERE rolle_id='.$minrolle['rolle_id'].' AND kjent_rolle_id='.$rolle_id.' AND spill_id='.$spill_id, $connection)) > 0) {
				// The characters are acquainted
				return true;
			}
			if ($grupper = get_rolle_grupper($minrolle['rolle_id'], $spill_id)) {
				foreach ($grupper as $gruppe) {
					if (mysql_num_rows(mysql_query('SELECT * FROM  `'.$table_prefix.'gruppe_roller` WHERE gruppe_id='.$gruppe['gruppe_id'].' AND rolle_id='.$rolle_id.' AND spill_id='.$spill_id, $connection)) > 0) {
						// The characters share atleast one group membership
						return true;
					}
				}
			}
		}
	}
	// No character relation
	return false;
	
}

function get_dummy_rolle($spill_id) {
        $rolle_first['groupleader_id'] = "";
	$rolle_first['spiller_id'] = "";
	$rolle_first['spill_id'] = $spill_id;
	$rolle_first['navn'] = "";
	$rolle_last['intern_info'] = "";
	$rolle_last['beskrivelse1'] = "";
	$rolle_last['beskrivelse2'] = "";
	$rolle_last['beskrivelse3'] = "";
	$rolle_last['beskrivelse_gruppe'] = "";
	if ($mal = get_rollemal($spill_id)) {
		foreach ($mal as $fieldname=>$fieldinfo) {
			if ($fieldinfo['intern'] != 1) {
				$field[$fieldname] = "";
			}
		}
		return array_merge($rolle_first, $field, $rolle_last);
	} else {
		return array_merge($rolle_first, $rolle_last);
	}
}

function get_roller($spill_id, $type = "aktive") {
	global $connection, $table_prefix, $config;
	if ($_SESSION['rolleorder']) {
		$order = $_SESSION['rolleorder'];
	} else {
		$order = "navn";
	}

	$pubfields = array(
		'rolle_id'=>1,
		'arrangor_id'=>1,
		'spill_id'=>1,
		'spiller_id'=>1,
		'navn'=>1,
		'oppdatert'=>1,
		'status'=>1,
		'locked'=>1
	);
	if ($spill_id == "0") {
		$allespill = get_spill();
		foreach ($allespill as $spill) {
			if ($maldata = get_maldata($spill['rollemal'])) {
				foreach ($maldata as $value) {
					if ($value['intern'] != 1) {
						$malfields .= $value['fieldname'].",";
					}
					if ($value['public'] == 1) {
						$pubfields[$value['fieldname']] = 1;
					}
				}
			}
			$fields = "rolle_id,arrangor_id,spill_id,spiller_id,navn,".$malfields."beskrivelse1,beskrivelse2,beskrivelse3,beskrivelse_gruppe,bilde,oppdatert,status,status_id,status_tekst,locked";
			if ($type == "alle") {
				$sql = "SELECT ".$fields." FROM `".$table_prefix."roller` WHERE spill_id=".intval($spill['spill_id'])." ORDER BY ".$order;
			} elseif ($type == "inaktive") {
				$sql = "SELECT ".$fields." FROM `".$table_prefix."roller` WHERE status!=0 && spill_id=".intval($spill['spill_id'])." ORDER BY ".$order;
			} else {
				$sql = "SELECT ".$fields." FROM `".$table_prefix."roller` WHERE status=0  && spill_id=".intval($spill['spill_id'])." ORDER BY ".$order;
			}
			$sqlroller = mysql_query($sql, $connection);
			while ($rolle = mysql_fetch_assoc($sqlroller)) {
				if (($config['kalmar_paranoid'] == 1 && is_related($rolle['rolle_id'], $rolle['spill_id'])) || ($config['kalmar_paranoid'] != 1)) {
					if ($rolle['spiller_id'] == $_SESSION['person_id']) {
						$roller[] = $rolle;
					} else {
						foreach ($rolle as $key=>$value) {
							if ($pubfields[$key]) {
								$pubrolle[$key] = $value;
							}
						}
						$roller[] = $pubrolle;
						unset($pubrolle);
					}
				}
			}
			unset($fields, $malfields, $maldata);
		}
	} else {
		$spillinfo = get_spillinfo($spill_id);
		$mal_id = $spillinfo['rollemal'];
		if ($maldata = get_maldata($mal_id)) {
			foreach ($maldata as $value) {
				$malfields .= $value['fieldname'].",";
				if ($value['public'] == 1) {
					$pubfields[$value['fieldname']] = 1;
				}
			}
		}
		$fields = "rolle_id,arrangor_id,spill_id,spiller_id,navn,".$malfields."intern_info,beskrivelse1,beskrivelse2,beskrivelse3,beskrivelse_gruppe,bilde,oppdatert,status,status_id,status_tekst,locked";
		if ($type == "alle") {
			$sql = "SELECT $fields FROM `".$table_prefix."roller` WHERE spill_id=".intval($spill_id)." ORDER BY ".$order;
		} elseif ($type == "inaktive") {
			$sql = "SELECT $fields FROM `".$table_prefix."roller` WHERE spill_id=".intval($spill_id)." && status!='0' ORDER BY ".$order;
		} else {
			$sql = "SELECT $fields FROM `".$table_prefix."roller` WHERE spill_id=".intval($spill_id)." && status='0' ORDER BY ".$order;
		}
		if ($sqlroller = mysql_query($sql, $connection)) {
			while ($rolle = mysql_fetch_assoc($sqlroller)) {
				if (($config['kalmar_paranoid'] == 1 && is_related($rolle['rolle_id'], $rolle['spill_id'])) || ($config['kalmar_paranoid'] != 1)) {
					if ($rolle['spiller_id'] == $_SESSION['person_id']) {
						$roller[] = $rolle;
					} else {
						foreach ($rolle as $key=>$value) {
							if ($pubfields[$key]) {
								$pubrolle[$key] = $value;
							}
						}
						$roller[] = $pubrolle;
						unset($pubrolle);
					}
				}
			}
		} else {
			return false;
		}
	}
	if ($roller) {
		if (strpos(strtolower($order), ' desc') !== false) {
			$order = explode(' ', $order);
			$roller = array_msort($roller, $order[0], 'desc');
		} else {
			$roller = array_msort($roller, $order);
		}
		return $roller;
	}
	return false;
}

function get_mine_roller($spill_id) {
	global $connection, $table_prefix;
	if ($_SESSION['rolleorder']) {
		$order = $_SESSION['rolleorder'];
	} else {
		$order = "navn";
	}
	if ($spill_id == 0) {
		$sql = "SELECT * FROM `".$table_prefix."roller` WHERE spiller_id=".intval($_SESSION['person_id'])." WHERE status='0' ORDER BY ".$order;
	} else {
		$sql = "SELECT * FROM `".$table_prefix."roller` WHERE spiller_id=".intval($_SESSION['person_id'])." && spill_id=".intval($spill_id)." && status='0' ORDER BY ".$order;
	}
	$sqlroller = mysql_query($sql, $connection);
	$roller = array();
	while ($rolle = mysql_fetch_assoc($sqlroller)) {
		if (is_aktiv_spill($rolle['spill_id'])) {
			$roller[$rolle['spill_id']][] = $rolle;
		}
	}
	if ($roller) {
		krsort($roller);
		return $roller;
	}
	return false;
}

function get_spiller_roller($person_id, $spill_id) {
	global $connection, $table_prefix;
	if ($_SESSION['rolleorder']) {
		$order = $_SESSION['rolleorder'];
	} else {
		$order = "navn";
	}
	if ($spill_id == 0) {
		$sql = "SELECT * FROM `".$table_prefix."roller` WHERE spiller_id=".intval($person_id)." && status='0' ORDER BY ".$order;
	} else {
		$sql = "SELECT * FROM `".$table_prefix."roller` WHERE spiller_id=".intval($person_id)." && spill_id=".intval($spill_id)." && status='0' ORDER BY ".$order;
	}
	$sqlroller = mysql_query($sql, $connection);
	while ($tuple = mysql_fetch_assoc($sqlroller)) {
		$roller[] = $tuple;
	}
	if ($roller) {
		return $roller;
	}
	return false;
}

function oppdater_rolle() {
	global $connection, $table_prefix, $config;
	$mal = get_spillmal($_POST['spill_id'], "rollemal");
	if ($maldata = get_maldata($mal['mal_id'])) {
		foreach ($maldata as $entry) {
			switch ($entry['type']) {
				case "check":
				if (!$_POST['rolle'][$entry['fieldname']]) {
					$sql .= "$entry[fieldname]='0',";
				}
				break;
				case "listmulti":
				$sql .= $entry['fieldname']."='".sql_serialize($_POST[$entry['fieldname']])."',";
				break;
			}
		}
	}
	foreach ($_POST['rolle'] as $key=>$value) {
		$sql .= "$key='$value',";
	}
	$sql .= "oppdatert=".time().",";
	mysql_query("UPDATE `".$table_prefix."roller` SET ".substr($sql, 0, -1)." WHERE rolle_id=".intval($_POST['rolle_id'])." && spill_id=".intval($_POST['spill_id']), $connection) or die(mysql_eror());
	unlock_rolle($_POST['rolle_id'], $_POST['spill_id']);
}

function lock_rolle($rolle_id, $spill_id) {
	global $connection, $table_prefix, $config;
	$locked = serialize(array(time(), $_SESSION['person_id']));
	mysql_query("UPDATE `".$table_prefix."roller` SET locked='".$locked."' WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id), $connection);
}

function unlock_rolle($rolle_id, $spill_id) {
	global $connection, $table_prefix, $config;
	mysql_query("UPDATE `".$table_prefix."roller` SET locked='0' WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id), $connection);
}

function check_lock_rolle($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$lockinfo = mysql_fetch_assoc(mysql_query("SELECT locked FROM `".$table_prefix."roller` WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id), $connection));
	if ($lockinfo['locked'] != "0") {
		return unserialize($lockinfo['locked']);
	}
	return false;
}

function unlock_roller_all($person_id) {
	global $connection, $table_prefix, $config;
	mysql_query("UPDATE `".$table_prefix."roller` SET locked='0'", $connection);
}

function get_opd_roller($time, $spill_id) {
	$roller = get_roller($spill_id);
	if ($roller) {
		foreach ($roller as $rolle) {
			if ($rolle['oppdatert'] > $time) {
				$nyeroller[] = $rolle;
			}
		}
		if ($nyeroller) {
			return $nyeroller;
		}
	}
	return false;
}

function get_rolle_spill($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$spilldata = mysql_query("SELECT spill_id FROM ".$table_prefix."roller WHERE rolle_id=".intval($rolle_id)." && spill_id != ".intval($spill_id), $connection);
	while ($andrespill_id = mysql_fetch_assoc($spilldata)) {
		$andrespill_info = get_spillinfo($andrespill_id['spill_id']);
		$andre_spill[$andrespill_id['spill_id']] = $andrespill_info['navn'];
		unset($spill_id, $andrespill_info);
	}
	return $andre_spill;
}

#############################################
# Funksjoner for behandling av rolleforslag #
#############################################

function get_rolleforslag($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$spillinfo = get_spillinfo($spill_id);
	$mal_id = $spillinfo['rollemal'];
	if ($maldata = get_maldata($mal_id)) {
		foreach ($maldata as $value) {
			$malfields .= $value['fieldname'].",";
		}
	}
	$fields = "rolle_id,arrangor_id,spill_id,spiller,navn,".$malfields."intern_info,beskrivelse1,beskrivelse2,beskrivelse3,beskrivelse_gruppe,oppdatert,locked,godkjent";
	$rolle = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `".$table_prefix."rolleforslag` WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id), $connection));
	if ($rolle) {
		return $rolle;
	}
	return false;
}

function get_dummy_rolleforslag($spill_id) {
	$rolle_first['groupleader_id'] = "";
	$rolle_first['spiller'] = "";
	$rolle_first['navn'] = "";
	$rolle_last['intern_info'] = "";
	$rolle_last['beskrivelse1'] = "";
	$rolle_last['beskrivelse2'] = "";
	$rolle_last['beskrivelse3'] = "";
	$rolle_last['beskrivelse_gruppe'] = "";
	if ($mal = get_rollemal($spill_id)) {
		foreach ($mal as $fieldname=>$fieldinfo) {
			$field[$fieldname] = "";
		}
		return array_merge($rolle_first, $field, $rolle_last);
	}
	return array_merge($rolle_first, $rolle_last);
}

function get_mine_rolleforslag($spill_id) {
	global $connection, $table_prefix;
	if ($_SESSION['rolleorder']) {
		$order = $_SESSION['rolleorder'];
	} else {
		$order = "navn";
	}
	if ($spill_id == "0") {
		$allespill = get_spill();
		foreach ($allespill as $spill) {
			if ($maldata = get_rollemal($spill['spill_id'])) {
				foreach ($maldata as $value) {
					$malfields .= $value['fieldname'].",";
				}
			}
			$sql = "SELECT rolle_id,arrangor_id,spill_id,spiller,navn,".$malfields."intern_info,beskrivelse1,beskrivelse2,beskrivelse3,beskrivelse_gruppe,oppdatert,locked,godkjent FROM `".$table_prefix."rolleforslag` WHERE spiller=".$_SESSION['person_id']." && spill_id=".intval($spill['spill_id'])." ORDER BY ".$order;
			$sqlroller = mysql_query($sql, $connection);
			while ($tuple = mysql_fetch_assoc($sqlroller)) {
				$roller[] = $tuple;
			}
			unset($sql, $malfields, $maldata);
		}
	} else {
		if ($maldata = get_rollemal($spill_id)) {
			foreach ($maldata as $value) {
				$malfields .= $value['fieldname'].",";
			}
		}
		$sql = "SELECT rolle_id,arrangor_id,spill_id,spiller,navn,".$malfields."intern_info,beskrivelse1,beskrivelse2,beskrivelse3,beskrivelse_gruppe,oppdatert,locked,godkjent FROM `".$table_prefix."rolleforslag` WHERE spiller=".$_SESSION['person_id']." && spill_id=".intval($spill_id)." ORDER BY ".$order;
		if ($sqlroller = mysql_query($sql, $connection)) {
			while ($tuple = mysql_fetch_assoc($sqlroller)) {
				$roller[] = $tuple;
			}
		}
	}
	if ($roller) {
		return $roller;
	}
	return false;
}
function oppdater_rolleforslag() {
	global $connection, $table_prefix;
	$mal = get_spillmal($_POST['spill_id'], "rollemal");
	$maldata = get_maldata($mal['mal_id']);
	foreach ($maldata as $entry) {
		switch ($entry['type']) {
			case "check":
			if (!$_POST['rolle'][$entry['fieldname']]) {
				$sql .= $entry['fieldname']."='0',";
			}
			break;
			case "listmulti":
			$sql .= $entry['fieldname']."='".sql_serialize($_POST[$entry['fieldname']])."',";
			break;
		}
	}
	foreach ($_POST['rolle'] as $key=>$value) {
		$sql .= "$key='".$value."',";
	}
	$sql .= "oppdatert=".time().",";
	mysql_query("UPDATE `".$table_prefix."rolleforslag` SET ".substr($sql, 0, -1)." WHERE rolle_id=".intval($_POST['rolle_id'])." && spill_id=".intval($_POST['spill_id']), $connection);
	unlock_rolle($_POST['rolle_id'], $_POST['spill_id']);
}

function lock_rolleforslag($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$locked = serialize(array(time(), $_SESSION['person_id']));
	mysql_query("UPDATE `".$table_prefix."roller` SET locked='$locked' WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id), $connection);
}

function unlock_rolleforslag($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	mysql_query("UPDATE `".$table_prefix."roller` SET locked='0' WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id), $connection);
}

function check_lock_rolleforslag($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$lockinfo = mysql_fetch_assoc(mysql_query("SELECT locked FROM `".$table_prefix."roller` WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id), $connection));
	if ($lockinfo['locked'] != "0") {
		return unserialize($lockinfo['locked']);
	}
	return false;
}

function opprett_rolleforslag() {
	global $connection, $table_prefix;
	$mal = get_spillmal($_POST['spill_id'], "rollemal");
	$fields = "spill_id,";
	$values = intval($_POST['spill_id']).",";
/*	if ($maldata = get_maldata($mal['mal_id'])) {
		foreach ($maldata as $entry) {
			switch ($entry['type']) {
				case "check":
				if (!$_POST['rolle'][$entry['fieldname']]) {
					$fields .= "$entry[fieldname],";
					$values .= "'0',";
				}
				break;
			case "listmulti":
				$fields .= $entry['fieldname'].",";
				if ($_POST[$entry['fieldname']]) {
					$values .= "'".sql_serialize($_POST[$entry['fieldname']])."',";
				} else {
					$values .= "'".sql_serialize($_POST['rolle_'.$entry['fieldname']])."',";
				}
				break;
			}
		}
	}
*/
	foreach ($_POST['rolle'] as $key=>$value) {
		$fields .= "$key,";
		if (is_array($value)) {
			$values .= "'".sql_serialize($value)."',";
		} else {
			$values .= "'".$value."',";
		}
	}
	$fields .= "oppdatert,";
	$values .= time().",";
	mysql_query("INSERT INTO `".$table_prefix."rolleforslag` (".substr($fields, 0, -1).") VALUES (".substr($values, 0, -1).")", $connection) or exit(mysql_error());
	return mysql_insert_id();
}

function slett_rolleforslag() {
	global $connection, $table_prefix;
	mysql_query("DELETE FROM `".$table_prefix."rolleforslag` WHERE rolle_id=".intval($_GET['slett_rolle'])." && spill_id=".intval($_GET['spill_id']), $connection);
}

function get_opd_rolleforslag($time, $spill_id) {
	$roller = get_mine_rolleforslag($spill_id);
	if ($roller) {
		foreach ($roller as $rolle) {
			if ($rolle['oppdatert'] > $time) {
				$nyeroller[] = $rolle;
			}
		}
		if ($nyeroller) {
			return $nyeroller;
		}
	}
	return false;
}

###################################
# Funksjoner for kjentfolk-system #
###################################

function get_rolle_kjentfolk($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$sqlkjentfolk = mysql_query("SELECT * FROM `".$table_prefix."kjentfolk` WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id)." && type='rolle'", $connection) or exit(mysql_error());
	while ($data = mysql_fetch_assoc($sqlkjentfolk)) {
		if ($data) {
			$rolle = get_rolle($data['kjent_rolle_id'], $data['spill_id']);
			$kjentfolk[$data['kjent_rolle_id']] = $data;
			$kjentfolk[$data['kjent_rolle_id']]['navn'] = $rolle['navn'];
			$kjentfolk[$data['kjent_rolle_id']]['spiller_id'] = $rolle['spiller_id'];
			$kjentfolk[$data['kjent_rolle_id']]['beskrivelse1'] = $rolle['beskrivelse1'];
			$kjentfolk[$data['kjent_rolle_id']]['beskrivelse2'] = $rolle['beskrivelse2'];
			$kjentfolk[$data['kjent_rolle_id']]['beskrivelse3'] = $rolle['beskrivelse3'];
			$kjentfolk[$data['kjent_rolle_id']]['beskrivelse_gruppe'] = $rolle['beskrivelse_gruppe'];
		}
	}
	if ($kjentfolk) {
		return $kjentfolk;
	}
	return false;
}

function get_kjentfolk_data($rolle_id, $kjent_rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$kjentdata = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."kjentfolk` WHERE rolle_id=".intval($rolle_id)." && kjent_rolle_id=".intval($kjent_rolle_id)." && spill_id=".intval($spill_id)." && type='rolle'", $connection));
	if (is_array($kjentdata)) {
		return $kjentdata;
	}
	return false;
}

function get_kjentgruppe_data($rolle_id, $gruppe_id, $spill_id) {
	global $connection, $table_prefix;
	$kjentdata = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."kjentfolk` WHERE rolle_id=".intval($rolle_id)." && kjent_rolle_id=".intval($gruppe_id)." && spill_id=".intval($spill_id)." && type='gruppe'", $connection));
	if (is_array($kjentdata)) {
		return $kjentdata;
	}
	return false;
}

function get_kjentgrupper($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$sqlgrupper = mysql_query("SELECT * FROM `".$table_prefix."kjentfolk` WHERE rolle_id=".intval($rolle_id)." && spill_id=".intval($spill_id)." && type='gruppe'", $connection) or exit(mysql_error());
	while ($data = mysql_fetch_assoc($sqlgrupper)) {
		if ($data) {
			$gruppe = get_gruppe($data['kjent_rolle_id'], $data['spill_id']);
			$kjentgrupper[$data['kjent_rolle_id']] = $data;
			$kjentgrupper[$data['kjent_rolle_id']]['gruppe_id'] = $gruppe['gruppe_id'];
			$kjentgrupper[$data['kjent_rolle_id']]['navn'] = $gruppe['navn'];
			$kjentgrupper[$data['kjent_rolle_id']]['beskrivelse'] = $gruppe['beskrivelse'];
		}
	}
	if ($kjentgrupper) {
		return $kjentgrupper;
	}
	return false;
}

####################################
# Funksjoner for person-behandling #
####################################


function get_arrangorer() {
	global $connection, $table_prefix;
	if ($_SESSION['arrangororder']) {
		switch($_SESSION['arrangororder']) {
			case "alder":
			$order = "fodt desc";
			break;
			case "alder desc":
			$order = "fodt";
			break;
			default:
			$order = $_SESSION['arrangororder'];
		}
	} else {
		$order = "etternavn";
	}
	$sqlpersoner = mysql_query("SELECT person_id, type, etternavn, fornavn, fodt, alder, kjonn, telefon, mobil, email, bilde FROM `".$table_prefix."personer` WHERE type!='spiller' ORDER BY ".$order, $connection);
	$arrangorer = array();
	while ($tuple = mysql_fetch_assoc($sqlpersoner)) {
		$arrangorer[] = $tuple;
	}
	return $arrangorer;
}

function get_arrangor($person_id) {
	global $connection, $table_prefix;
	$arrangor = mysql_fetch_assoc(mysql_query("SELECT person_id, type, etternavn, fornavn, fodt, alder, kjonn, telefon, mobil, email, bilde FROM `".$table_prefix."personer` WHERE person_id=".$person_id." && type='arrangor'", $connection));
	if (count($arrangor) != 1) {
		return $arrangor;
	}
	return false;
}


function get_groupleader() {
	global $connection, $table_prefix;
	if ($_SESSION['groupleaderorder']) {
		switch($_SESSION['groupleaderorder']) {
			case "alder":
			$order = "fodt desc";
			break;
			case "alder desc":
			$order = "fodt";
			break;
			default:
			$order = $_SESSION['groupleaderorder'];
		}
	} else {
		$order = "etternavn";
	}
        
        $sqlpersoner = mysql_query("SELECT `".$table_prefix."personer`.person_id,type,etternavn,fornavn,fodt,alder,kjonn,adresse,postnr,poststed,telefon,mobil,email,mailpref,hensyn,intern_info,bilde,bruker_id,brukernavn,passord,secret,level,nowlog,lastlog,locked FROM `".$table_prefix."personer` LEFT JOIN `".$table_prefix."brukere` ON `".$table_prefix."brukere`.person_id=`".$table_prefix."personer`.person_id WHERE type='groupleader' ORDER BY $order", $connection);
	$groupleader = array();
	//for ($i = 0; $i < mysql_num_rows($sqlpersoner); $i++) {
	//	$arrangorer[] = mysql_fetch_assoc($sqlpersoner);
	while ($tuple = mysql_fetch_assoc($sqlpersoner)) {
		$groupleader[] = $tuple;
	}
	return $groupleader;
}

function get_spillere() {
	global $connection, $table_prefix;
	$sqlpersoner = mysql_query("SELECT person_id, type, etternavn, fornavn, fodt, alder, kjonn, telefon, mobil, email, bilde FROM `".$table_prefix."personer` WHERE type='spiller' ORDER BY etternavn", $connection);
	$spillere = array();
	while ($tuple = mysql_fetch_assoc($sqlpersoner)) {
		$spillere[] = $tuple;
	}
	return $spillere;
}

function oppdater_personinfo() {
	global $connection, $table_prefix, $config, $LANG;
	if ($_POST['person_id'] != $_SESSION['person_id']) {
		return false;
	}
	if (!$_POST['person']['poststed'] && $config['use_autoregion']) {
		if (!$_POST['person']['poststed'] = get_poststed($_POST['person']['postnr'])) {
			$_POST['person']['poststed'] = $LANG['MISC']['unknown'];
		}
	}
	foreach ($_POST['person'] as $key=>$value) {
		switch ($key) {
			case "person_id":
			case "spill_id":
			case "whereiwas":
			case "type":
			case "edited":
			case "bilde":
			case "slettbilde":
			case "dag":
			case "mnd":
			case "aar":
			break;
			default:
			$sql .= "$key='$value',";
		}
	}
	if (!intval($_POST['person']['aar'])) {
		$_POST['person']['aar'] = "2000";
	}
	if (checkdate($_POST['person']['mnd'], $_POST['person']['dag'], $_POST['person']['aar'])) {
		$sql .= "fodt='".$_POST['person']['aar']."-".$_POST['person']['mnd']."-".$_POST['person']['dag']."',";
	} else {
		$_SESSION['message'] = "<span class=\"red\">".$LANG['MESSAGE']['invalid_date']."</span><br><br>";
		$sql .= "fodt='0000-00-00',";
	}
	mysql_query("UPDATE `".$table_prefix."personer` SET ".substr($sql, 0, -1)." WHERE person_id=".intval($_POST['person_id']), $connection) or exit(mysql_error());
}

function get_person($person_id) {
	global $connection, $table_prefix;
	if ($person_id == $_SESSION['person_id']) {
		$fields = 'person_id, type, etternavn, fornavn, fodt, alder, kjonn, adresse, postnr, poststed, telefon, mobil, email, mailpref, hensyn, bilde'; 
	} else {
		$fields = 'person_id, type, etternavn, fornavn, fodt, alder, kjonn, telefon, mobil, email, bilde'; 
	}
	$person = mysql_fetch_assoc(mysql_query("SELECT ".$fields." FROM `".$table_prefix."personer` WHERE person_id=".intval($person_id), $connection));
	return $person;
}

function update_personmug($person_id, $image) {
	global $connection, $table_prefix;
	mysql_query("UPDATE `".$table_prefix."personer` SET bilde='".$image."' WHERE person_id=".intval($person_id), $connection);
	return true;
}

function get_mugshots($person_id, $type = 'person') {
	global $connection, $table_prefix;
	if ($result = mysql_query("SELECT * FROM `".$table_prefix."mugshots` WHERE person_id=".intval($person_id)." && type='".$type."'", $connection)) {
		while ($mugshot = mysql_fetch_assoc($result)) {
			$mugshots[] = $mugshot['image'];
		}
		if (is_array($mugshots)) {
			return $mugshots;
		}
	}
	return false;
}

function add_mugshot($person_id, $image, $type = 'person') {
	global $connection, $table_prefix;
	mysql_query("INSERT INTO `".$table_prefix."mugshots` VALUES (".intval($person_id).", '".$image."', '".$type."')", $connection);
	if (mysql_affected_rows > 0) {
		return true;
	}
	return false;
}

function get_all_mugshots() {
	global $connection, $table_prefix;
	if ($result = mysql_query("SELECT * FROM `".$table_prefix."mugshots`", $connection)) {
		while ($mugshot = mysql_fetch_assoc($result)) {
			$mugshots[] = $mugshot['image'];
		}
		if (is_array($mugshots)) {
			return array_unique($mugshots);
		}
	}
	return false;
}

function is_mugshot($image) {
	global $connection, $table_prefix;
	if (mysql_num_rows(mysql_query("SELECT * FROM `".$table_prefix."mugshots` WHERE image='".$image."'", $connection)) > 0) {
		return true;
	}
	return false;
}

function remove_mugshot($person_id, $image, $type = 'person') {
	global $connection, $table_prefix;
	mysql_query("DELETE FROM `".$table_prefix."mugshots` WHERE image='".$image."' && person_id=".intval($person_id)." && type='".$type."'", $connection);
	if (mysql_affected_rows($connection) > 0) {
		return true;
	}
	return false;
}

###################################
# Funksjoner for brukerbehandling #
###################################


function get_bruker($person_id) {
	global $connection, $table_prefix;
	$bruker = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."brukere` WHERE person_id=".intval($person_id), $connection));
	if ($bruker) {
		return $bruker;
	}
	return false;
}

function get_brukere() {
	global $connection, $table_prefix;
	$sqlbrukere = mysql_query("SELECT * FROM `".$table_prefix."brukere`", $connection);
	while ($data = mysql_fetch_assoc($sqlbrukere)) {
		$brukere[$data['bruker_id']] = $data;
	}
	if ($brukere) {
		return $brukere;
	}
	return false;
}

function nytt_brukernavn() {
	global $connection, $table_prefix;
	if (is_modifiable($_POST['person_id'])) {
		if (!$_POST['nybrukernavn']) {
			return false;
		}
		mysql_query("UPDATE `".$table_prefix."brukere` SET brukernavn='".$_POST['nybrukernavn']."' WHERE person_id=".intval($_POST['person_id']), $connection) or exit(mysql_error());
		return true;
	}
	return false;
}

function nytt_passord() {
	global $connection, $table_prefix;
	if (is_modifiable()) {
		if (!$_POST['nypassord']) {
			return false;
		}
		if ($_POST['nypassord'] != $_POST['nyconfirm']) {
			return false;
		}
		$passcrypt = md5($_POST['nypassord']);
		mysql_query("UPDATE `".$table_prefix."brukere` SET passord='".$passcrypt."' WHERE person_id=".intval($_POST['person_id']), $connection) or exit(mysql_error());
		return true;
	}
	return false;
}

function lock_bruker() {
	global $connection, $table_prefix;
	if (is_admin() && !is_last_admin($_GET['lock_bruker'])) {
		mysql_query("UPDATE `".$table_prefix."brukere` SET locked=1 WHERE person_id=".intval($_GET['lock_bruker']), $connection);
	}
}

###############################
# Funksjoner for mal-systemet #
###############################


function get_malentry($fieldname, $mal_id) {
	global $connection, $table_prefix;
	if ($fieldinfo = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."tabellmaler_data` WHERE fieldname='".$fieldname."' && mal_id=".intval($mal_id), $connection))) {
		return $fieldinfo;
	}
	return false;
}

function get_fields($table) {
	global $connection, $sqlbase;
	$sqlfields = mysql_list_fields($sqlbase, $table, $connection);
	$numfields = mysql_num_fields($sqlfields);
	for ($i = 0; $i < $numfields; $i++) {
		$fields[$i] = mysql_field_name($sqlfields, $i);
	}
	return $fields;
}

function get_malinfo($mal_id) {
	global $connection, $table_prefix;
	$mal = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."tabellmaler` WHERE mal_id=".intval($mal_id), $connection));
	return $mal;
}

function get_maldata($mal_id) {
	global $connection, $table_prefix;
	$maldata = array();
	$sqlmal = mysql_query("SELECT * FROM `".$table_prefix."tabellmaler_data` WHERE mal_id=".intval($mal_id)." ORDER BY pri", $connection);
	while ($data = mysql_fetch_assoc($sqlmal)) {
		$maldata[$data['fieldname']] = $data;
	}
	return $maldata;
}

function get_paameldingsmal($spill_id) {
	return get_mal($spill_id, "paameldingsmal");
}

function get_rollemal($spill_id) {
	return get_mal($spill_id, "rollemal");
}

function get_mal($spill_id, $type) {
	global $connection, $table_prefix;
	$spillinfo = get_spillinfo($spill_id);
	$mal_id = $spillinfo[$type];
	return get_maldata($mal_id);
}

function get_spillmal($spill_id, $maltype) {
	global $connection, $table_prefix;
	$spillinfo = get_spillinfo($spill_id);
	$mal = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."tabellmaler` WHERE mal_id=".intval($spillinfo[$maltype]), $connection));
	return $mal;
}

function get_maler($type = 0) {
	global $connection, $table_prefix;
	if (!$_SESSION['malorder']) {
		$order = "navn";
	} else {
		$order = $_SESSION['malorder'];
	}
	if ($type == 0) {
		$sqlmaler = mysql_query("SELECT * FROM `".$table_prefix."tabellmaler` ORDER BY ".$order, $connection);
	} else {
		$sqlmaler = mysql_query("SELECT * FROM `".$table_prefix."tabellmaler` WHERE type='".$type."' ORDER BY ".$order, $connection);
	}
	$maler = array();
	while ($mal = mysql_fetch_assoc($sqlmaler)) {
		foreach ($mal as $key=>$value) {
			$maler[$mal['mal_id']][$key] = $value;
		}
	}
	return $maler;
}

############################################
# Funksjoner for behandling av p�meldinger #
############################################

function get_paamelding($person_id, $spill_id) {
	global $connection, $table_prefix;
	$spillinfo = get_spillinfo($spill_id);
	$mal_id = $spillinfo['paameldingsmal'];
	if ($maldata = get_paameldingsmal($spill_id)) {
		foreach ($maldata as $value) {
			if ($person_id == $_SESSION['person_id']) {
				if (!$value['intern']) {
					$malfields .= $value['fieldname'].",";
				}
			} else {
				if ($value['public']) {
					$malfields .= $value['fieldname'].",";
				}
			}
		}
	}
	$fields = "person_id,spill_id,paameldt,betalt,".$malfields."annet";
	$spiller = get_person($person_id);
	$paamelding = mysql_fetch_assoc(mysql_query("SELECT ".$fields." FROM `".$table_prefix."paameldinger` WHERE spill_id=".intval($spill_id)." && person_id=".intval($person_id), $connection));
	if ($paamelding) {
		return array_merge($spiller, $paamelding);
	}
	return false;
}

function slett_paamelding() {
	global $connection, $table_prefix;
	mysql_query("DELETE FROM `".$table_prefix."paameldinger` WHERE person_id=".intval($_GET['slett_paamelding'])." && spill_id=".intval($_GET['spill_id']), $connection);
	mysql_query("UPDATE `".$table_prefix."roller` SET spiller_id=0 WHERE spiller_id=".intval($_GET['slett_paamelding'])." && spill_id=".intval($_GET['spill_id']), $connection);
	mysql_query("UPDATE `".$table_prefix."rollekonsept` SET spiller_id=0 WHERE spiller_id=".intval($_GET['slett_paamelding'])." && spill_id=".intval($_GET['spill_id']), $connection);
}

function oppdater_paamelding() {
	global $connection, $table_prefix;
	$mal = get_spillmal($_POST['spill_id'], "paameldingsmal");
	$maldata = get_maldata($mal['mal_id']);
	foreach ($maldata as $entry) {
		switch ($entry['type']) {
			case "check":
			if (!$_POST['paamelding'][$entry['fieldname']]) {
				$sql .= $entry['fieldname']."='0',";
			}
			break;
			case "listmulti":
			$sql .= $entry['fieldname']."='".sql_serialize($_POST[$entry['fieldname']])."',";
			break;
		}
	}
	foreach ($_POST['paamelding'] as $key=>$value) {
		if (is_array($value)) {
			$sql .= $key."='".sql_serialize($value)."',";
		} else {
			switch($key) {
				case "betalt":
				case "dag":
				case "mnd":
				case "aar":
				case "time":
				case "min":
				break;
				default:
				$sql .= $key."='".$value."',";
			}
		}
	}
	if (!$_POST['paamelding']['betalt']) {
		$sql .= "betalt=0,";
	} else {
		$sql .= "betalt=1,";
	}
	$paameldt = strtotime($_POST['paamelding']['aar']."-".$_POST['paamelding']['mnd']."-".$_POST['paamelding']['dag']." ".$_POST['paamelding']['time'].":".$_POST['paamelding']['min']);
	$sql .= "paameldt=".intval($paameldt).",";
	mysql_query("UPDATE `".$table_prefix."paameldinger` SET ".substr($sql, 0, -1)." WHERE person_id=".intval($_POST['person_id'])." && spill_id=".intval($_POST['spill_id']), $connection);
}

function opprett_paamelding() {
	global $connection, $table_prefix, $person_id;
	$person_id = $_POST['person_id'];
	$fields .= 'person_id,spill_id,';
	$values .= intval($person_id).",".intval($_POST['spill_id']).",";
	$mal = get_spillmal($_POST['spill_id'], 'paameldingsmal');
	$maldata = get_maldata($mal['mal_id']);
	foreach ($maldata as $entry) {
		switch ($entry['type']) {
			case 'check':
			if (!$_POST['paamelding'][$entry['fieldname']]) {
				$fields .= $entry['fieldname'].",";
				$values .= "'0',";
			}
			break;
			case 'listmulti':
			$fields .= $entry['fieldname'].",";
			$values .= "'".sql_serialize($_POST[$entry['fieldname']])."',";
			break;
		}
	}
	foreach ($_POST['paamelding'] as $key=>$value) {
		if ($key != 'ny_paamelding') {
			if (is_array($value)) {
				$fields .= $key.',';
				$values .= "'".sql_serialize($value)."',";
			} else {
				switch($key) {
					case 'betalt':
					case 'dag':
					case 'mnd':
					case 'aar':
					case 'time':
					case 'min':
					break;
					default:
					$fields .= $key.',';
					$values .= "'".$value."',";
				}
			}
		}
	}
	if (!$_POST['paamelding']['betalt']) {
		$betalt = 0;
	} else {
		$betalt = 1;
	}
	if (!$_POST['paamelding']['dag']) {
		$paameldt = time();
	} else {
		$paameldt = strtotime($_POST['paamelding']['aar']."-".$_POST['paamelding']['mnd']."-".$_POST['paamelding']['dag']." ".$_POST['paamelding']['time'].":".$_POST['paamelding']['min']);
	}
	$fields .= 'paameldt,betalt,';
	$values .= intval($paameldt).",".intval($betalt).",";
	mysql_query("INSERT INTO `".$table_prefix."paameldinger` (".substr($fields, 0, -1).") VALUES (".substr($values, 0, -1).")", $connection) or exit(mysql_error());
}

function get_paameldinger($spill_id) {
	global $connection, $table_prefix;
	$spillinfo = get_spillinfo($spill_id);
	$mal_id = $spillinfo['paameldingsmal'];
	if ($maldata = get_paameldingsmal($spill_id)) {
		foreach ($maldata as $value) {
			$malfields .= $value['fieldname'].",";
		}
	}
	$fields = 'person_id,spill_id,paameldt,betalt,'.$malfields.'annet';
	$sqlpersoner = mysql_query("SELECT ".$fields." FROM `".$table_prefix."paameldinger` WHERE spill_id=".intval($spill_id), $connection);
	while ($tuple = mysql_fetch_assoc($sqlpersoner)) {
		$personer[] = $tuple;
	}
	if ($personer) {
		return $personer;
	}
	return false;
}

function get_paameldte($spill_id) {
	global $connection, $table_prefix;
	switch (basename($_SERVER['PHP_SELF'])) {
		case "paameldinger.php":
		if ($_SESSION['paameldingorder']) {
			switch($_SESSION['paameldingorder']) {
				case "alder":
				$order = "fodt desc";
				break;
				case "alder desc":
				$order = "fodt";
				break;
				default:
				$order = $_SESSION['paameldingorder'];
			}
		} else {
			$order = "etternavn";
		}
		break;
		case "betaling.php":
		if ($_SESSION['betalingorder']) {
			switch($_SESSION['betalingorder']) {
				case "alder":
				$order = "fodt desc";
				break;
				case "alder desc":
				$order = "fodt";
				break;
				default:
				$order = $_SESSION['betalingorder'];
			}
		} else {
			$order = "etternavn";
		}
		break;
		default:
		$order = "etternavn";
	}
	$spillinfo = get_spillinfo($spill_id);
	$mal_id = $spillinfo['paameldingsmal'];
	if ($maldata = get_paameldingsmal($spill_id)) {
		foreach ($maldata as $value) {
			$malfields .= $value['fieldname'].",";
		}
	}
	$fields = $table_prefix.'personer.person_id, type, etternavn, fornavn, fodt, alder, kjonn, adresse, postnr, poststed, telefon, mobil, email, mailpref, hensyn, intern_info, bilde, spill_id, paameldt, betalt, '.$malfields.' annet';
	$sqlpaameldte = mysql_query("SELECT ".$fields." FROM `".$table_prefix."personer`,`".$table_prefix."paameldinger` WHERE `".$table_prefix."paameldinger`.person_id=`".$table_prefix."personer`.person_id && `".$table_prefix."paameldinger`.spill_id=".intval($spill_id)." ORDER BY ".$order, $connection) or exit(mysql_error());
	while ($tuple = mysql_fetch_assoc($sqlpaameldte)) {
		$paameldte[] = $tuple;
	}
	if ($paameldte) {
		return $paameldte;
	}
	return false;
}


function get_paameldte_og_arrangorer($spill_id) {
	global $connection, $table_prefix;
	$paameldte = mysql_query("SELECT `".$table_prefix."personer`.person_id,fornavn,etternavn FROM `".$table_prefix."personer`,`".$table_prefix."paameldinger` WHERE `".$table_prefix."paameldinger`.person_id=`".$table_prefix."personer`.person_id && `".$table_prefix."paameldinger`.spill_id=".intval($spill_id)." ORDER BY etternavn", $connection) or exit(mysql_error());
	$arrangorer = mysql_query("SELECT person_id,fornavn,etternavn FROM `".$table_prefix."personer` WHERE type='arrangor' ORDER BY etternavn", $connection) or exit(mysql_error());
	/*
	for ($i = 0; $i < mysql_num_rows($paameldte); $i++) {
		$personer[] = mysql_fetch_assoc($paameldte);
	}
	for ($i = 0; $i < mysql_num_rows($arrangorer); $i++) {
		$personer[] = mysql_fetch_assoc($arrangorer);
	}
	*/
	while($tuple = mysql_fetch_assoc($paameldte)) {
		$personer[] = $tuple;
	}
	while($tuple = mysql_fetch_assoc($arrangorer)) {
		$personer[] = $tuple;
	}
	if ($personer) {
		ksort($personer);
		return $personer;
	}
	return false;
}


function get_opd_paameldinger($time, $spill_id) {
	$paameldinger = get_paameldte($spill_id);
	if ($paameldinger) {
		foreach ($paameldinger as $paamelding) {
			if ($paamelding['paameldt'] > $time) {
				$nyepaameldinger[] = $paamelding;
			}
		}
		if ($nyepaameldinger) {
			return $nyepaameldinger;
		}
	}
	return false;
}


###################################
# Funskjoner for gruppebehandling #
###################################

function get_gruppe($gruppe_id, $spill_id) {
	global $connection, $table_prefix;
	$gruppe = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."grupper` WHERE gruppe_id=".intval($gruppe_id)." && spill_id=".intval($spill_id), $connection));
	return $gruppe;
}

function get_grupper($spill_id) {
	global $connection, $table_prefix;
	if ($_SESSION['gruppeorder']) {
		$order = $_SESSION['gruppeorder'];
	} else {
		$order = "navn";
	}
	$sqlgrupper = mysql_query("SELECT * FROM `".$table_prefix."grupper` WHERE spill_id=".intval($spill_id)." ORDER BY ".$order, $connection);
	$grupper = array();
	while ($gruppe = mysql_fetch_assoc($sqlgrupper)) {
		foreach ($gruppe as $key=>$value) {
			$grupper[$gruppe['gruppe_id']][$key] = $value;
		}
	}
	if ($grupper) {
		return $grupper;
	}
	return false;
}

function get_gruppe_roller($gruppe_id, $spill_id) {
	global $connection, $table_prefix;
	$sqlmedlemmer = mysql_query("SELECT `".$table_prefix."roller`.rolle_id,spiller_id,`".$table_prefix."roller`.spill_id,navn,beskrivelse_gruppe FROM `".$table_prefix."roller`,`".$table_prefix."gruppe_roller` WHERE `".$table_prefix."roller`.rolle_id=`".$table_prefix."gruppe_roller`.rolle_id && `".$table_prefix."roller`.spill_id=`".$table_prefix."gruppe_roller`.spill_id && `".$table_prefix."gruppe_roller`.spill_id=".intval($spill_id)." && gruppe_id=".intval($gruppe_id), $connection) or exit(mysql_error());
	while ($data = mysql_fetch_assoc($sqlmedlemmer)) {
		$medlemmer[$data['rolle_id']] = $data;
	}
	return $medlemmer;
}

function get_rolle_grupper($rolle_id, $spill_id) {
	global $connection, $table_prefix;
	$sqlgrupper = mysql_query("SELECT * FROM `".$table_prefix."grupper`,`".$table_prefix."gruppe_roller` WHERE `".$table_prefix."grupper`.gruppe_id=`".$table_prefix."gruppe_roller`.gruppe_id && `".$table_prefix."gruppe_roller`.spill_id=".intval($spill_id)." && rolle_id=".intval($rolle_id), $connection) or exit(mysql_error());
	while ($data = mysql_fetch_assoc($sqlgrupper)) {
		$grupper[$data['gruppe_id']] = $data;
	}
	if ($grupper) {
		return $grupper;
	}
	return false;
}

function rolle_er_medlem($rolle_id, $gruppe_id, $spill_id) {
	global $connection, $table_prefix;
	$check = mysql_query("SELECT * FROM `".$table_prefix."gruppe_roller` WHERE rolle_id=".intval($rolle_id)." && gruppe_id=".intval($gruppe_id)." && spill_id=".intval($spill_id), $connection);
	if (mysql_num_rows($check) > 0) {
		return true;
	}
	return false;
}

##################################
# Funksjoner for spillbehandling #
##################################

function get_spillhistorikk($person_id) {
	global $connection, $table_prefix;
	$person = get_person($person_id);
	if ($person['type'] == "arrangor") {
		$data = get_spiller_roller($person_id, 0);
		if ($data) {
			foreach ($data as $entry) {
				$spill[] = get_spillinfo($entry['spill_id']);
			}
		}
	} else {
		$data = mysql_query("SELECT * FROM `".$table_prefix."paameldinger` WHERE person_id=".intval($person_id), $connection) or exit(mysql_error());
		while ($data2 = mysql_fetch_assoc($data)) {
			$spill[] = get_spillinfo($data2['spill_id']);
		}
	}
	if ($spill) {
		return $spill;
	}
	return false;
}

function get_spillinfo($spill_id) {
	global $connection, $table_prefix;
	$spillinfo = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."spill` WHERE spill_id=".intval($spill_id), $connection));
	return $spillinfo;
}

function get_spill($thisorder = 0) {
	global $connection, $table_prefix;
	if ($thisorder) {
		$order = $thisorder;
	} else {
		if ($_SESSION['spillorder']) {
			$order = $_SESSION['spillorder'];
		} else {
			$order = "start DESC";
		}
	}
	$sqlspill = mysql_query("SELECT * FROM `".$table_prefix."spill` ORDER BY ".$order, $connection);
	$spill = array();
	while ($spillinfo = mysql_fetch_assoc($sqlspill)) {
		foreach ($spillinfo as $key=>$value) {
			$spill[$spillinfo['spill_id']][$key] = $value;
		}
	}
	return $spill;
}

function get_aktive_spill($order = 0) {
	$spill = get_spill($order);
	foreach ($spill as $info) {
		if (strtolower($info['status']) == 'aktiv') {
			$aktive_spill[] = $info;
		}
	}
	if ($aktive_spill) {
		return $aktive_spill;
	}
	return false;
}

function is_aktiv_spill($spill_id) {
	$spillinfo = get_spillinfo($spill_id);
	if (strtolower($spillinfo['status']) == 'aktiv') {
		return true;
	}
	return false;
}


#####################################
# Funksjoner for vedleggsbehandling #
#####################################

function get_tillatt_vedlagt($vedlagt) {
	$match = array('rolle', 'gruppe', 'spill', 'rollekonsept');
	return in_array($vedlagt, $match);
}

function get_add_vedlegg_id($vedlagt) {
	$match = array('rolle', 'gruppe');
	return in_array($vedlagt, $match);
}

function get_vedleggsliste($vedlegg_id, $spill_id, $vedlagt) {
	global $connection, $table_prefix;
	if (!get_tillatt_vedlagt($vedlagt)) {
		return false;
	}
	$sqlquery = "SELECT * FROM `".$table_prefix."filvedlegg` WHERE spill_id=".intval($spill_id)." && vedlagt='".$vedlagt."'";
	$sqlquery .= $vedlegg_id == 0 ? "" : " && vedlegg_id=".intval($vedlegg_id);
	$sqlvedlegg = mysql_query($sqlquery, $connection);
	while ($data = mysql_fetch_assoc($sqlvedlegg)) {
		if ($filinfo = get_fil($data['fil_id'])) {
			$vedlegg[] = $filinfo;
		}
	}
	if ($vedlegg) {
		return $vedlegg;
	}
	return false;
}

function is_vedlegg($fil_id, $vedlegg_id, $spill_id, $vedlagt) {
	global $connection, $table_prefix;
	if (!get_tillatt_vedlagt($vedlagt)) {
		return;
	}
	$sqlquery = "SELECT * FROM `".$table_prefix."filvedlegg` WHERE fil_id=".intval($fil_id)." && spill_id=".intval($spill_id)." && vedlagt='".$vedlagt."'";
	if (get_add_vedlegg_id($vedlagt)) {
		$sqlquery .= " && vedlegg_id=".intval($vedlegg_id);
	}
	$check = mysql_query($sqlquery, $connection);
	if (mysql_num_rows($check) > 0) {
		return true;
	}
	return false;
}

function get_fil_vedlagt($fil_id, $vedlagt) {
	global $connection, $table_prefix;
	$sqlvedlagt = mysql_query("SELECT * FROM `".$table_prefix."filvedlegg` WHERE fil_id=".intval($fil_id)." && vedlagt='".$vedlagt."'", $connection);
	while ($tuple = mysql_fetch_assoc($sqlvedlagt)) {
		$vedlagt_hos[] = $tuple;
	}
	if ($vedlagt_hos) {
		return $vedlagt_hos;
	}
	return false;
}


#############################
# Funksjoner for kalenderen #
#############################

function opprett_kalnotat() {
	global $connection, $table_prefix;
	if (checkdate($_POST['notat_mnd'], $_POST['notat_dag'], $_POST['notat_aar'])) {
		$juliandc = unixtojd(strtotime($_POST['notat_aar']."-".$_POST['notat_mnd']."-".$_POST['notat_dag']));
		mysql_query("INSERT INTO `".$table_prefix."kalender` (person_id, juliandc, tekst, public) VALUES (".intval($_SESSION['person_id']).", '".$juliandc."', '".$_POST['tekst']."', '1')", $connection) or exit(mysql_error());
		return true;
	}
	return false;
}

function oppdater_kalnotat() {
	global $connection, $table_prefix;
	if (checkdate($_POST['notat_mnd'], $_POST['notat_dag'], $_POST['notat_aar'])) {
		$juliandc = unixtojd(strtotime($_POST['notat_aar']."-".$_POST['notat_mnd']."-".$_POST['notat_dag']));
		mysql_query("UPDATE `".$table_prefix."kalender` SET juliandc='".$juliandc."', tekst='".$_POST['tekst']."' WHERE notat_id=".intval($_POST['edited_notat'])." AND public=1 AND person_id=".$_SESSION['person_id'], $connection);
		return true;
	} else {
		mysql_query("UPDATE `".$table_prefix."kalender` SET tekst='".$_POST['tekst']."' WHERE notat_id=".intval($_POST['edited_notat'])." AND public=1 AND person_id=".$_SESSION['person_id'], $connection);
	}
	return false;
}

function get_kalnotater($firstday, $lastday = 0) {
	global $connection, $table_prefix;
	if ($lastday == 0) {
		$sqlnotater = mysql_query("SELECT * FROM `".$table_prefix."kalender` WHERE juliandc='".$firstday."' AND public=1", $connection) or exit(mysql_error());
	} else {
		$sqlnotater = mysql_query("SELECT * FROM `".$table_prefix."kalender` WHERE juliandc>='".$firstday."' AND juliandc<='".$lastday."' AND public=1", $connection) or exit(mysql_error());
	}
	while ($data = mysql_fetch_assoc($sqlnotater)) {
		if ($lastday == 0) {
			$notater[] = $data;
		} else {
			$notater[$data['juliandc']][] = $data;
		}
	}
	if ($notater) {
		return $notater;
	}
	return false;
}

function get_kalnotat($notat_id) {
	global $connection, $table_prefix;
	$notat = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."kalender` WHERE notat_id=".intval($notat_id)." AND public=1", $connection));
	return $notat;
}

function slett_kalnotat($notat_id) {
	global $connection, $table_prefix;
	mysql_query("DELETE FROM `".$table_prefix."kalender` WHERE notat_id=".intval($notat_id)." AND public=1 AND person_id=".$_SESSION['person_id'], $connection);
	return true;
}

#####################################
# Funksjoner for inn- og ut-logging #
#####################################

function do_login() {
	global $connection, $table_prefix, $config;
	$brukersjekk = mysql_query("SELECT * FROM `".$table_prefix."brukere` WHERE brukernavn='".$_POST['brukernavn']."'", $connection) or exit(mysql_error());
	if (mysql_num_rows($brukersjekk) == 0) {
		login_failed();
	} else {
		$brukerinfo = mysql_fetch_assoc($brukersjekk);
		if ($_POST['passord'] != md5($_SESSION['validator'].$brukerinfo['passord'])) {
			login_failed();
		}
		unset($_SESSION['validator']);
		if ($brukerinfo['locked'] != 0) {
			$_SESSION['account_locked'] = true;
		} else {
			if (!$brukerinfo['secret']) {
				$secret = md5(microtime().$_POST['brukernavn'].$_POST['passord'].uniqid(""));
				mysql_query("UPDATE `".$table_prefix."brukere` SET secret='".$secret."' WHERE bruker_id=".intval($brukerinfo['bruker_id']), $connection);
			} else {
				$secret = $brukerinfo['secret'];
			}
			$now = time();
			$expire = $now + $config['autologout'];
			mysql_query("UPDATE `".$table_prefix."brukere` SET nowlog=".$now.",fingerprint='".md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'])."' WHERE bruker_id=".intval($brukerinfo['bruker_id']), $connection);
			$ckexpire = strtotime($config['ckexpire']);
			if ($_POST['husk']) {
				setcookie($config['ckprefix']."_data", $secret, $ckexpire, $config['ckdir']);
			}
			$person = get_person($brukerinfo['person_id']);
			$_SESSION['is_logged_in'] = true;
			$_SESSION['bruker_id'] = $brukerinfo['bruker_id'];
			$_SESSION['person_id'] = $brukerinfo['person_id'];
			$_SESSION['level'] = $brukerinfo['level'];
			$_SESSION['navn'] = $person['fornavn']." ".$person['etternavn'];
			$_SESSION['email'] = $person['email'];
			$_SESSION['lastlog'] = $expire;
			$_SESSION['previouslog'] = $brukerinfo['lastlog'];
			$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']);
			$_SESSION['vis_generelt_nav'] = true;;
		}
		header("Location: ./userinfo.php");
		exit();
	}
}

function do_relogin() {
	global $connection, $table_prefix, $config;
	$brukersjekk = mysql_query("SELECT * FROM `".$table_prefix."brukere` WHERE secret='".$_COOKIE[$config['ckprefix']."_data"]."' && fingerprint='".md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'])."'", $connection) or exit(mysql_error());
	if (mysql_num_rows($brukersjekk) == 0) {
		do_logout();
	} else {
		$brukerinfo = mysql_fetch_assoc(mysql_query("SELECT * FROM `".$table_prefix."brukere` WHERE secret='".$_COOKIE[$config['ckprefix']."_data"]."'", $connection));
		$now = time();
		$expire = time() + $config['autologout'];
		$person = get_person($brukerinfo['person_id']);
		$_SESSION['is_logged_in'] = true;
		$_SESSION['bruker_id'] = $brukerinfo['bruker_id'];
		$_SESSION['person_id'] = $brukerinfo['person_id'];
		$_SESSION['level'] = $brukerinfo['level'];
		$_SESSION['navn'] = $person['fornavn']." ".$person['etternavn'];
		$_SESSION['email'] = $person['email'];
		$_SESSION['lastlog'] = $expire;
		if (!$_SESSION['previouslog']) {
			$_SESSION['previouslog'] = $brukerinfo['lastlog'];
		}
		$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']);
		activity_log();
	}
}

function activity_log() {
	global $connection, $table_prefix, $config;
	$logtime = time();
	$expire = time() + $config['autologout'];
	$brukerinfo = mysql_fetch_array(mysql_query("SELECT * FROM `".$table_prefix."brukere` WHERE bruker_id=".intval($_SESSION['bruker_id']), $connection));
	if ($brukerinfo['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'])) {
		do_logout();
		exit();
	} else {
		mysql_query("UPDATE `".$table_prefix."brukere` SET lastlog=".intval($expire).", nowlog=".intval($logtime)." WHERE bruker_id=".intval($_SESSION['bruker_id']), $connection);
		$brukere = get_brukere();
		foreach ($brukere as $bruker) {
			if ($bruker['lastlog'] < time()) {
				mysql_query("UPDATE `".$table_prefix."brukere` SET nowlog=0 WHERE bruker_id=".intval($bruker['bruker_id']), $connection);
				unlock_roller_all($bruker['person_id']);
			}
		}
	}
}

function do_logout() {
	global $connection, $table_prefix, $config;
	mysql_query("UPDATE `".$table_prefix."brukere` SET lastlog=nowlog,nowlog=0,fingerprint='' WHERE bruker_id=".intval($_SESSION['bruker_id']), $connection);
	unlock_roller_all($_SESSION['person_id']);
	setcookie($config['ckprefix']."_data", "", 1, $config['ckdir']);
	session_unset();
	$_SESSION = array();
	session_destroy();
	header("Location: ./login.php");
	exit();
}


######################
# Diverse funksjoner #
######################

function get_configuration() {
	global $connection, $table_prefix;
	$result = mysql_query("SELECT * FROM `".$table_prefix."config`", $connection);
	while ($thisconf = mysql_fetch_array($result)) {
		$config[$thisconf['name']] = $thisconf['value'];
	}
	# Unserialize the serialzed config-settings.
	$config['types_not_in_lists'] = unserialize($config['types_not_in_lists']);
	$config['fields_not_in_person_lists'] = unserialize($config['fields_not_in_person_lists']);
	$config['fields_not_in_contacts_list'] = unserialize($config['fields_not_in_contacts_list']);
	return $config;

}

function logged_on_now() {
	global $connection, $table_prefix;
	$brukere = get_brukere();
	foreach ($brukere as $bruker) {
		if (($bruker['nowlog'] != 0) && ($bruker['bruker_id'] != $_SESSION['bruker_id'])) {
			$person = get_person($bruker['person_id']);
			$bruker['navn'] = $person['fornavn']." ".$person['etternavn'];
			$logged_on[] = $bruker;
		}
	}
	return $logged_on;
}

function get_poststed($zipcode) {
	global $connection, $table_prefix, $config;
	$region = mysql_fetch_assoc(mysql_query("SELECT region FROM `".$table_prefix."zipcodemap` WHERE zipcode='".$zipcode."'", $connection));
	if ($region) {
		return $region['region'];
	}
	return false;
}

function db_select($table, $cond) {
	global $connection, $table_prefix;
	$result = mysql_query("SELECT * FROM `".$table_prefix.$table."` WHERE ".$cond, $connection);
	if (mysql_num_rows($result) == 1) {
		return mysql_fetch_assoc($result);
	}
	//for ($i = 0; $i < mysql_num_rows($result); $i++) {
	//	$return[] = mysql_fetch_assoc($result);
	while ($tuple = mysql_fetch_assoc($result)) {
		$return[] = $tuple;
	}
	if (is_array($return)) {
		return $return;
	}
	return false;
}

// TODO: Check for illegal characters... must do further research.
function contains_illegal_chars($string) {
	$illegal = array("\\", "/", ".", chr(0), chr(255));
	foreach($illegal as $ill) {
		if(false !== strpos($string, $ill)) {
			return true;
		}
	}

	return false;
}

?>
